#ifndef FORMBASE64_H
#define FORMBASE64_H

#include "FormBaseWidget.h"
#include "components/CommonFunc.h"

typedef enum _BASE64_TYPE_
{
    BASE64_TYPE_UNKNOW         = 0,
    BASE64_TYPE_DECODE         = 1,
    BASE64_TYPE_ENCODE         = 2
}BASE64_TYPE;

class FormBase64Proc : public BaseFormWidget
{
    Q_OBJECT
public:
    FormBase64Proc(QWidget * parent = nullptr);

    virtual ~FormBase64Proc(){}

    // 设置风格
    void setFont(const QFont &stFont);

private slots:

    // 清空输入
    void pb_ClearInput();

    // 解码
    void pb_Decode();

    // 编码
    void pb_Encode();

    // 设置日志窗口是否展示
    void pb_LogSet();

    // 打印编解码数据
    void pb_PrintData();

    // 拷贝数据到剪贴板
    void pb_Copy2Clipboard();

    // 保存文件
    void pb_Save();

    // 自动更新结果数据到剪贴板，或保存至本地文件
    void pb_Update();

    // 清空输出
    void pb_Clearlog();

    // 解码结果图像自动识别
    void pb_CheckImg();

private:
    // 创建功能按钮
    void newFuncPtb();

    // 保存数据
    void saveRetData();

    // 是否存在已编解码结果数据
    bool hasData();

    // 判断是否为文件，对于文件内容则读取文件数据
    bool isFileAndRead(std::string &strSrc);

    // 检查解码结果是否为图像，并将图像结果展示出来
    void checkImgAndShow();

private:
    QTextEdit*              m_pQTextEdit;       // 待编解码文本输入框
    QTextBrowser*           m_pQTextBrowser;    // 编解码过程日志打印窗口
    std::string             m_strLastData;      // 编解码过程数据

    BASE64_TYPE             m_eOperation;       // 操作类型
    bool                    m_bCheckImg;        // 解码结果图像自动识别
    QPushButton*            m_pQPBCheckImg;     // 自动识别按钮

    bool                    m_bUpdate;          // 是否启用自动保存方式
    QPushButton*            m_pQPBUpdate;       // 自动更新按钮
    QPushButton*            m_pQPBlog;          // 执行日志展示按钮
    QPushButton*            m_pQPBDellog;       // 日志清理按钮
    QPushButton*            m_pQPBPrint;        // 打印按钮
};


#endif // FORMBASE64_H
